package com.ts.common.core.corethreadPool;

import java.util.concurrent.*;

public class Demo {

    public static void main(String[] args) {


        // 1.创建一个固定数量的线程池
//        ExecutorService executorService = Executors.newCachedThreadPool();

        // work
        // 线程池的7个参数--》那个7个？7个代表啥意思？为什么10
        ThreadPoolExecutor executorService = ExecutorUtils.getThreadPoll();
//        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
//                10, // 核心线程池数量(线程池中维护的最少数量)
//                30, // 线程池的最大数量(包含了核心数量，核心线程数量被用完了，需要创建新的线程)
//                3000, // 时间(线程空闲的时间，超过这个时间就从线程池中删除线程)
//                TimeUnit.MILLISECONDS, // 时间单位
//                new ArrayBlockingQueue(2000), // 队列(没有空闲线程分配是会暂时压入队列等待),只有队列满了以后才会创建新的线程
//                Executors.defaultThreadFactory(), // 线程工厂
//                new ThreadPoolExecutor.AbortPolicy() // 拒绝策略(线程数量已经达到了最大数量同时没有空闲线程，而且队列也满了就会拒绝)
//        );


        // 2.从线程池中申请10个线程
        for (int i = 0; i < 20; i++) {
            try {
                executorService.submit(() -> {
                    System.out.println(Thread.currentThread().getName());
                });
            } catch (RejectedExecutionException e) {
            }
        }
        System.out.println(Thread.currentThread().getName());

        executorService.shutdown();
    }
}
